#include <iostream>
using namespace std;

//C++成员变量和成员函数是分开存储的
//每一个非静态成员函数指挥诞生一份函数实例，也就是说多个了同类型的对象会共用一块代码
//问题：这一块代码是如何区分那个对象调用自己的呢？
//C++通过提供特殊的对象指针，this指针，解决上述问题，this指针指向被调用的成员函数所属的对象

//this指针是隐含每一个非静态成员函数内的一种指针
//this指针不需要定义，直接使用即可

//用途：
//1.当形参和成员变量同名时，可用this指针来区分
//2.在类和非静态成员函数中返回对象本身，可以使用return *this
class Person
{
public:
    Person(int age){
        //this指针指向被调用的成员函数所属的对象
        this->age = age;//不加this出来的就是一个地址
    }
    int age;
    Person& PersonAddAge(Person &p){//如果&不加返回的还是20，而链式会创建新的变量
        this->age += p.age;
        //this指向p2的指针，而*this指向的就是p2这个对象本体
        return *this;
    }

};

//1.解决名称冲突
void test01(){
    Person p1(18);
    cout << "p1的年龄为:" << p1.age<<endl; 
}
//2.返回对象本身用*this
void test02(){
    Person p1(10);
    Person p2(10);

    //链式编程思想
    p2.PersonAddAge(p1).PersonAddAge(p1).PersonAddAge(p1);
    cout << "p2的年龄为:" << p2.age<<endl; 

}

int main(){
    test02();
    system("pause");
    return 0;
}